package Socket;

import org.w3c.dom.ls.LSOutput;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class FileServerScoket {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        //1.创建服务器ServerSocket对象和系统要指定的端口号
        while(true)//增加了循环，让服务器可以一直接收文件
        {
            Socket socket = server.accept();
            //2.使用ServerScoket中的accep方法，获取客户端
            /*添加了多线程，让服务器可以同时接收多个文件
            还用try catch将内容声明    */
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                        InputStream is = socket.getInputStream();
                        //获取网络的字节输入流到is中
                        File file = new File("C:\\Users\\啦啦啦\\Desktop\\Copy");
                        if(!file.exists())
                        {
                            file.mkdirs();
                            //创建一个文件夹
                        }
                        //后期优化一下
                        /*FileOutputStream fos = new FileOutputStream(file+"\\2.md");*/
                        String filename = "\\网络下载"+ System.currentTimeMillis()+new Random().nextInt(99999)+".md";
                        //创建一个随机的名称,防止文件重复
                        FileOutputStream fos = new FileOutputStream(file+filename);
                        //创建一个绑定了复制路径的对象
                        int len = 0;
                        byte[] bytes = new byte[1024];
                        //下面使用的read方法读取客户端上传的文件，一直读取不到文件的结束标记
                        //read方法进入堵塞状态，一直死循环
                        //后面的代码不会执行到
                        //客户端的read同理，也读取不到服务回写的内容
                        //没有结束标记是因为在上传的时候就没有把结束标记上传（在结束标记出现时就停止上传了）
                        while((len=is.read(bytes))!=-1)
                        {
                            fos.write(bytes,0,len);
                        }
                        //复制内容到本地
                        socket.getOutputStream().write("Ok 上传".getBytes());
                        fos.close();
                        socket.close();
                    }catch(IOException e)
                    {
                        System.out.println(e);
                    }
                }
            }).start();
        }
       //因为服务器一直开启，所以不用close了
        // server.close();
    }
}
